package persistencia.carreras.ensambladores;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import compartido.IEntidad;

import persistencia.IAlmacen;
import persistencia.IGondola;
import persistencia.compartido.Tipo;
import persistencia.csv.AlmacenCSV;
import persistencia.excepciones.StringDeConexionIncompatible;

public class Fabrica {
	protected IAlmacen carreras;
	protected IAlmacen configuracion;
	protected String directorio;

	protected Map<String,Long> identificadores;
		
	public Fabrica(String directorio) {
		this.carreras = new AlmacenCSV();
		this.configuracion = new AlmacenCSV();
		this.directorio = directorio;
		
		identificadores = new HashMap<String, Long>();
		try {
			configuracion.abrir(directorio);
			IGondola contadores = configuracion.crearGondola(new Tipo<IEntidad>(Identificador.class));
			Iterator<IEntidad> it = contadores.getIterator();
			while (it.hasNext()) {
				Identificador id = (Identificador) it.next();
				identificadores.put(id.getIdentificador(),id.getIdActual());
			}
			configuracion.cerrar();
		} catch (StringDeConexionIncompatible e) {
		}
		
	}
	
	protected long nuevoID(Class<? extends IEntidad> clase) {
		Long id = identificadores.get(clase.getCanonicalName());
		if (id == null)
			id = new Long(Identificador.idInicial);
		identificadores.put(clase.getCanonicalName(),id+1);
			
		return id;
	}

}
